package realm.inorder.persistence.model.types;

import java.util.EnumSet;

public class EnumUtils {

	public static <T extends Enum<T>> T parse(Class<T> enumClass, Object id) {
		T t = null;

		if (EnumUtils.isClassInstanceOfIdentifier(enumClass)) {
			final EnumSet<T> enumSet = EnumSet.allOf(enumClass);

			for (final T tmp : enumSet) {
				final Identifiable<?> identifier = (Identifiable<?>) tmp;

				if (id.equals(identifier.getId())) {
					t = tmp;
					break;
				}
			}
		}

		return t;
	}

	private static boolean isClassInstanceOfIdentifier(Class<?> enumClass) {
		for (final Class<?> klazz : enumClass.getInterfaces()) {
			if (Identifiable.class == klazz) {
				return true;
			}
		}

		return false;
	}

}
